rendernode: Blur alpha channel for cairo blur node
authorBenjamin Otte <otte@redhat.com>
Mon, 20 May 2019 01:24:24 +0000 (03:24 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 21 May 2019 04:43:59 +0000 (06:43 +0200)
The blur node still doesn't properly blur with a transform, but at least
it now doesn't turn semi-transparent stuff black.

gsk/gskrendernodeimpl.c

index 596e6da006e10bbd933afe8c1d86071241fde77f..d0a24ed463b620f1c2b5ae420d1f01818da890a2 100644 (file)
@@ -3666,6 +3666,7 @@ blur_once (cairo_surface_t *src,
           r += c1[0];
           g += c1[1];
           b += c1[2];
+          a += c1[3];
         }
       p_dest_row = p_dest;
       for (x = 0; x < width; x++)
@@ -3674,6 +3675,7 @@ blur_once (cairo_surface_t *src,
           p_dest_row[0] = div_kernel_size[r];
           p_dest_row[1] = div_kernel_size[g];
           p_dest_row[2] = div_kernel_size[b];
+          p_dest_row[3] = div_kernel_size[a];
           p_dest_row += n_channels;
 
           /* the pixel to add to the kernel */
@@ -3692,6 +3694,7 @@ blur_once (cairo_surface_t *src,
           r += c1[0] - c2[0];
           g += c1[1] - c2[1];
           b += c1[2] - c2[2];
+          a += c1[3] - c2[3];
         }
 
       p_src += src_rowstride;
@@ -3715,6 +3718,7 @@ blur_once (cairo_surface_t *src,
           r += c1[0];
           g += c1[1];
           b += c1[2];
+          a += c1[3];
         }
 
       p_dest_col = p_dest;
@@ -3725,6 +3729,7 @@ blur_once (cairo_surface_t *src,
           p_dest_col[0] = div_kernel_size[r];
           p_dest_col[1] = div_kernel_size[g];
           p_dest_col[2] = div_kernel_size[b];
+          p_dest_col[3] = div_kernel_size[a];
           p_dest_col += dest_rowstride;
 
           /* the pixel to add to the kernel */
@@ -3742,6 +3747,7 @@ blur_once (cairo_surface_t *src,
           r += c1[0] - c2[0];
           g += c1[1] - c2[1];
           b += c1[2] - c2[2];
+          a += c1[3] - c2[3];
         }
 
       p_src += n_channels;